package com.xinqi.modules.sys.log.service.impl;

import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.xinqi.common.base.response.PageInfo;
import com.xinqi.common.base.response.Param;
import com.xinqi.common.mybatis.data.service.impl.BaseServiceImpl;
import com.xinqi.common.mybatis.utils.Pages;
import com.xinqi.modules.sys.log.convert.AsyncLogConvert;
import com.xinqi.modules.sys.log.domain.AsyncLogEntity;
import com.xinqi.modules.sys.log.dto.req.AsyncLogQueryDTO;
import com.xinqi.modules.sys.log.dto.rsp.AsyncLogResultDTO;
import com.xinqi.modules.sys.log.mapper.AsyncLogMapper;
import com.xinqi.modules.sys.log.service.AsyncLogService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Map;


/**
 * 异步日志服务层
 *
 * @author dzy
 */
@Slf4j
@Service("asyncLogService")
@RequiredArgsConstructor
public class AsyncLogServiceImpl extends BaseServiceImpl<AsyncLogMapper, AsyncLogEntity> implements AsyncLogService {

    private final AsyncLogConvert asyncLogConvert;

    /**
     * 异步日志保存
     *
     * @param map
     * @return
     */
    @Override
    public Long saveAsyncLog(Map<String, Object> map) {
        AsyncLogEntity entity = asyncLogConvert.create(map);
        this.baseMapper.insert(entity);
        return entity.getId();
    }

    @Override
    public PageInfo<AsyncLogResultDTO> page(Param pageable, AsyncLogQueryDTO query) {
        //排序
        if (CollectionUtils.isEmpty(pageable.getSorts())) {
            pageable.setSorts(new ArrayList<>());
        }
        pageable.getSorts().add("al.create_time,DESC");
        return Pages.convert(this.baseMapper.findPage(Pages.page(pageable), query));
    }
}
